/* * Copyright (C) 2014 IUH �yber$oft Team * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package vn.cybersoft.obs.android.provider; import java.io.File; import vn.cybersoft.obs.android.utilities.Log; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.os.Environment; /** * @author Luan Vu (hlvu.cybersoft@gmail.com) * */ public class OBSDatabaseHelper extends SQLiteOpenHelper { /** * Original OBS Database. **/ private static final int VERSION_1 = 1; private static final int VERSION_2 = 2; // This creates a default original mode name "short" private static final String DEFAULT_MODE_1 = "('mode_name_short', 'mode_desc_short', 0, 255, 600000, 1, 1, 1, 1, 1);"; // This creates a default original mode name "long" private static final String DEFAULT_MODE_2 = "('mode_name_long', 'mode_desc_long', 0, 25, 15000, 0, 0, 0, 0, 0);"; // Database and table names static final String DATABASE_NAME = "obs.db"; static final String TIME_SCHEDULES_TABLE_NAME = "time_schedules"; static final String POWER_SCHEDULES_TABLE_NAME = "power_schedules"; static final String OPTIMAL_MODES_TABLE_NAME = "optimal_modes"; static final String BATTERY_TRACES_TABLE_NAME = "battery_traces"; private static void createTimeSchedulesTable(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + TIME_SCHEDULES_TABLE_NAME + " (" + DataProviderApi.TimeSchedulesColumns._ID + " INTEGER PRIMARY KEY, " + DataProviderApi.TimeSchedulesColumns.HOUR + " INTEGER NOT NULL, " + DataProviderApi.TimeSchedulesColumns.MINUTES + " INTEGER NOT NULL, " + DataProviderApi.TimeSchedulesColumns.DAYS_OF_WEEK + " INTEGER NOT NULL, " + DataProviderApi.TimeSchedulesColumns.SCHEDULE_TIME + " INTEGER NOT NULL, " + DataProviderApi.TimeSchedulesColumns.ENABLED + " INTEGER NOT NULL, " + DataProviderApi.TimeSchedulesColumns.MODE_ID + " INTEGER REFERENCES " + OPTIMAL_MODES_TABLE_NAME + "(" + DataProviderApi.OptimalModesColumns._ID + ") " + "ON UPDATE CASCADE ON DELETE CASCADE" + ");"); Log.i("Time schedules table created"); } private static void createPowerSchedulesTable(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + POWER_SCHEDULES_TABLE_NAME + " (" + DataProviderApi.PowerSchedulesColumns._ID + " INTEGER PRIMARY KEY, " + DataProviderApi.PowerSchedulesColumns.BATTERY_LEVEL + " INTEGER NOT NULL, " + DataProviderApi.PowerSchedulesColumns.ENABLED + " INTEGER NOT NULL, " + DataProviderApi.PowerSchedulesColumns.MODE_ID + " INTEGER REFERENCES " + OPTIMAL_MODES_TABLE_NAME + "(" + DataProviderApi.OptimalModesColumns._ID + ") " + "ON UPDATE CASCADE ON DELETE CASCADE" + ");"); Log.i("Power schedules table created"); } private static void createOptimalModesTable(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + OPTIMAL_MODES_TABLE_NAME + " (" + DataProviderApi.OptimalModesColumns._ID + " INTEGER PRIMARY KEY, " + DataProviderApi.OptimalModesColumns.NAME + " TEXT NOT NULL, " + DataProviderApi.OptimalModesColumns.DESC + " TEXT, " + DataProviderApi.OptimalModesColumns.CAN_EDIT + " INTEGER NOT NULL, " + DataProviderApi.OptimalModesColumns.SCREEN_BRIGHTNESS + " INTEGER NOT NULL, " + DataProviderApi.OptimalModesColumns.SCREEN_TIMEOUT + " INTEGER NOT NULL, " + DataProviderApi.OptimalModesColumns.VIBRATE + " INTEGER NOT NULL, " + DataProviderApi.OptimalModesColumns.WIFI + " INTEGER NOT NULL, " + DataProviderApi.OptimalModesColumns.BLUETOOTH + " INTEGER NOT NULL, " + DataProviderApi.OptimalModesColumns.SYNC + " INTEGER NOT NULL, " + DataProviderApi.OptimalModesColumns.HAPTIC_FEEDBACK + " INTEGER NOT NULL" + ");"); Log.i("Modes table created"); } private static void createBatteryTracesTable(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + BATTERY_TRACES_TABLE_NAME + " (" + DataProviderApi.BatteryTracesColumns._ID + " INTEGER PRIMARY KEY, " + DataProviderApi.BatteryTracesColumns.HOUR + " INTEGER NOT NULL, " + DataProviderApi.BatteryTracesColumns.MINUTES + " INTEGER NOT NULL, " + DataProviderApi.BatteryTracesColumns.LEVEL + " INTEGER NOT NULL, " + DataProviderApi.BatteryTracesColumns.DATE + " INTEGER NOT NULL" + ");"); Log.i("battery traces table created"); } private Context mContext; public OBSDatabaseHelper(Context context) { super(context, Environment.getExternalStorageDirectory() + File.separator + DATABASE_NAME, null, VERSION_1); mContext = context; } @Override public void onCreate(SQLiteDatabase db) { createOptimalModesTable(db); createTimeSchedulesTable(db); createPowerSchedulesTable(db); createBatteryTracesTable(db); // insert default modes Log.i("Inserting default optimal modes"); String cs = ", "; //comma and space String insertMe = "INSERT INTO " + OPTIMAL_MODES_TABLE_NAME + " (" + DataProviderApi.OptimalModesColumns.NAME + cs + DataProviderApi.OptimalModesColumns.DESC + cs + DataProviderApi.OptimalModesColumns.CAN_EDIT + cs + DataProviderApi.OptimalModesColumns.SCREEN_BRIGHTNESS + cs + DataProviderApi.OptimalModesColumns.SCREEN_TIMEOUT + cs + DataProviderApi.OptimalModesColumns.VIBRATE + cs + DataProviderApi.OptimalModesColumns.WIFI + cs + DataProviderApi.OptimalModesColumns.BLUETOOTH + cs + DataProviderApi.OptimalModesColumns.SYNC + cs + DataProviderApi.OptimalModesColumns.HAPTIC_FEEDBACK + ") VALUES "; db.execSQL(insertMe + DEFAULT_MODE_1); db.execSQL(insertMe + DEFAULT_MODE_2); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if (Log.LOGV) { Log.v("Upgrading alarms database from version " + oldVersion + " to " + newVersion); } } }